package com.linyaonan.leetcode.easy._693;

/**
 * 给定一个正整数，检查他是否为交替位二进制数：换句话说，就是他的二进制数相邻的两个位数永不相等。
 * <p>
 * 示例 1:
 * <p>
 * 输入: 5
 * 输出: True
 * 解释:
 * 5的二进制数是: 101
 * 示例 2:
 * <p>
 * 输入: 7
 * 输出: False
 * 解释:
 * 7的二进制数是: 111
 * 示例 3:
 * <p>
 * 输入: 11
 * 输出: False
 * 解释:
 * 11的二进制数是: 1011
 *  示例 4:
 * <p>
 * 输入: 10
 * 输出: True
 * 解释:
 * 10的二进制数是: 1010
 *
 * @author: Lin
 * @date: 2020/1/4
 */
public class BinaryNumber {

    public boolean hasAlternatingBits(int n) {
        String s = Integer.toBinaryString(n);
        for (int i = 0; i < s.toCharArray().length; i++) {
            if (i % 2 == 0) {
                if (s.charAt(i) == '0') {
                    return false;
                }
            } else {
                if (s.charAt(i) == '1') {
                    return false;
                }
            }
        }
        return true;
    }

    public boolean hasAlternatingBits2(int n) {
        int temp = n ^ (n >> 1);
        return (temp & (temp + 1)) == 0;
    }
}
